﻿using System.Windows;
using System;

namespace Motar.Desktop
{

    /// <summary>
    /// 
    /// </summary>
    public interface IDialogService
    {

        /// <summary>
        /// 
        /// </summary>
        /// <param name="content"></param>
        /// <returns></returns>
        MessageBoxResult Show(string content);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="owner"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        MessageBoxResult Show(Window owner, string content);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="content"></param>
        /// <param name="caption"></param>
        /// <returns></returns>
        MessageBoxResult Show(string content, string caption);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="owner"></param>
        /// <param name="content"></param>
        /// <param name="caption"></param>
        /// <returns></returns>
        MessageBoxResult Show(Window owner, string content, string caption);
        
        /// <summary>
        /// 
        /// </summary>
        /// <param name="content"></param>
        /// <param name="caption"></param>
        /// <param name="button"></param>
        /// <returns></returns>
        MessageBoxResult Show(string content, string caption, MessageBoxButton button);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="owner"></param>
        /// <param name="content"></param>
        /// <param name="caption"></param>
        /// <param name="button"></param>
        /// <returns></returns>
        MessageBoxResult Show(Window owner, string content, string caption, MessageBoxButton button);
        
        /// <summary>
        /// 
        /// </summary>
        /// <param name="content"></param>
        /// <param name="caption"></param>
        /// <param name="button"></param>
        /// <param name="icon"></param>
        /// <returns></returns>
        MessageBoxResult Show(string content, string caption, MessageBoxButton button, MessageBoxImage icon);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="owner"></param>
        /// <param name="content"></param>
        /// <param name="caption"></param>
        /// <param name="button"></param>
        /// <param name="icon"></param>
        /// <returns></returns>
        MessageBoxResult Show(Window owner, string content, string caption, MessageBoxButton button, MessageBoxImage icon);
        
        /// <summary>
        /// 
        /// </summary>
        /// <param name="content"></param>
        /// <param name="caption"></param>
        /// <param name="button"></param>
        /// <param name="icon"></param>
        /// <param name="defaultResult"></param>
        /// <returns></returns>
        MessageBoxResult Show(string content, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="owner"></param>
        /// <param name="content"></param>
        /// <param name="caption"></param>
        /// <param name="button"></param>
        /// <param name="icon"></param>
        /// <param name="defaultResult"></param>
        /// <returns></returns>
        MessageBoxResult Show(Window owner, string content, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult);
        
        /// <summary>
        /// 
        /// </summary>
        /// <param name="content"></param>
        /// <param name="caption"></param>
        /// <param name="button"></param>
        /// <param name="icon"></param>
        /// <param name="defaultResult"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        MessageBoxResult Show(string content, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult, MessageBoxOptions options);
        
        /// <summary>
        /// 
        /// </summary>
        /// <param name="owner"></param>
        /// <param name="content"></param>
        /// <param name="caption"></param>
        /// <param name="button"></param>
        /// <param name="icon"></param>
        /// <param name="defaultResult"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        MessageBoxResult Show(Window owner, string content, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult, MessageBoxOptions options);

        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="TDialog"></typeparam>
        void Show<TDialog>() where TDialog : Window;

        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="TDialog"></typeparam>
        /// <param name="owner"></param>
        void Show<TDialog>(Window owner) where TDialog : Window;

        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="TDialog"></typeparam>
        /// <param name="initialization"></param>
        void Show<TDialog>(Action<TDialog> initialization) where TDialog : Window;

        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="TDialog"></typeparam>
        /// <param name="owner"></param>
        /// <param name="initialization"></param>
        void Show<TDialog>(Window owner, Action<TDialog> initialization) where TDialog : Window;
    }
}
